using System;

namespace awesome_log_system
{
	/** 
	 * Класс для ведения логов
	 */
	public class Logger
	{
		/**
		 * Приемник данных, в который будут посылаться логи
		 */
		private DataDestination dataDestination = null;

		/**
		 * Уровни логгирования.
		 * 
		 * Описание:
		 * <b>Error</b> - в программе возникла критическая ошибка, в следствие чего 
		 * дальнейшая работа программы скорее всего невозможна
		 * <b>Warning</b> - сообщения, содержащие некоторые исключительные ситуации, 
		 * на которые следует обратить внимание
		 * <b>Message</b> - сообщения с полезной информацией
		 * <b>Verbose</b> - вывод подробной отладочной информации
		 */
		public enum Level { Error, Warning, Message, Verbose };

		/**
		 * Конструктор по умолчанию
		 */
		public Logger ()
		{
		}

		/**
		 * Конструктор для инициализации логгера приемником данных
		 * 
		 * @param dest Приемник данных
		 */
		public Logger (DataDestination dest)
		{
			dataDestination = dest;
		}

		/**
		 * Запись лога.
		 * 
		 * @param level Уровень записи лога
		 * @param content Содержимое лога
		 */
		public void log (Level level, string content)
		{
			DateTime now = System.DateTime.Now;
			object[] param = {now.ToShortDateString(), now.ToLongTimeString(), level.ToString (), content};
			string stringToAppend = string.Format("{0} {1} [{2}] {3}", param);
			dataDestination.append (stringToAppend);
		}
	}
}

